# LEGO 拓展教程

## 1. 足球机器人

### 足球机器人形态安装步骤

安装1

先将两个光敏传感器拆下：
![Img](./media/d579fb1abbdea07f234500eec853fc3d.png)

安装所需零件：
![Img](./media/8747bf260ace7a222231937c2fa8ae3e.png)

安装：
![Img](./media/2b62462b93e03a057c0dd46a6f4436d8.png)

完成：
![Img](./media/09a1359a2c0e7ad95fbd580c8fdf6bc2.png)

安装2

安装所需零件：
![Img](./media/c990c834d579ff6e0c3a831d68bb8ec9.png)

安装：
![Img](./media/db5fe1018a0128cfe7af546a1048a907.png)

完成：
![Img](./media/0ea5ab53c8426a1a4d9b0db2e8cc45a1.png)

安装3

安装所需零件：
![Img](./media/c0a0af98ca2716c0af4dd4553cbe36b7.png)

安装：
![Img](./media/831869b1e4f83d647e9c7839cf387cbd.png)

完成：
![Img](./media/17c5654600c03efd390036b8a27d41b1.png)

安装4

安装所需零件：
![Img](./media/6b3479d8ae15244eefc4883d33c72ad4.png)

安装：
![Img](./media/dca847251e2cdb8501bdbf46defa25ff.png)

完成：
![Img](./media/1ee412dcb6a5c77ba738c780e69a0662.png)

安装5

安装所需零件：
![Img](./media/4a94da53fc6f1323ac95a3636ff2274e.png)

安装：
![Img](./media/df51f9d0460d490675e2d7a3ed5007bf.png)

完成：
![Img](./media/c0fa59fe062e23adbfda476fd8931f79.png)

安装6

安装所需零件：
![Img](./media/3f44c7d2ed93ad0be11318a007bd8139.png)

安装：
<span style="color: rgb(255, 76, 65);">（注意舵机线的位置）</span>

![Img](./media/a19b4025037228d34c7cfcbe82dd3b88.png)

完成：
![Img](./media/2f0e7d2f5ffe69389d96d0f1296d96bd.png)

安装7

安装所需零件：
![Img](./media/890922364d7dc3ec800aa45c0dfaaca2.png)

安装：
![Img](./media/acfde7c22f573fbd2df639dbb4c4b9e8.png)

完成：
![Img](./media/3839f4113996019717f7809e9e188b9c.png)

安装8

安装所需零件：
![Img](./media/4a59c4c589ec9174c9085de7b482f0db.png)

安装：
<span style="color: rgb(255, 76, 65);">（注意调整夹爪角度，使其闭合朝前）</span>
![Img](./media/0127c955549bde3065fc981e0b5adac6.png)

完成：
![Img](./media/18acddf557765aa0e0685b2802994cd7.png)

安装9

安装所需零件：
![Img](./media/03264a00cba31da4b5427909e62f27ee.png)

<span style="color: rgb(255, 76, 65);">注意：在安装前需要先调节舵机角度为180度。</span>

将舵机的线接到PCB上板的S2接口：
|舵机|小车PCB板|
| :--: | :--: |
|棕线| G |
| 红线 | 5V |
| 橙黄线 | S2（G3）|

![Img](./media/d9868c0d4845dd5073cfb101102f4394.png)

**Arduino 代码：**

```
#include <Servo.h>
Servo lgservo;  // 创建舵机对象来控制舵机

void setup() {
  lgservo.attach(3);  // 将舵机接到引脚G3上
}

void loop() {
  lgservo.write(180); // 舵机转到对应角度位置
}
```
上面的Arduino代码在资料中有提供，打开舵机的调整代码并烧录到Beetlebot的Raspberry Pi Pico主板，上传完成。代码如下图位置：
![Img](./media/2b1eecee0ca0b70f30a094b88d28b0f5.png)

安装：
<span style="color: rgb(255, 76, 65);">（齿轮安装时保持夹爪为闭合朝前状态）</span>

![Img](./media/f933055161a37e43a60ac95226a7dfd2.png)

完成：
![Img](./media/22e439912193078af9c60a772ea49ffe.png)

安装10

安装所需零件：
![Img](./media/645ac9c9711994e69af7b0802bb9433d.png)

安装：
![Img](./media/dcba796467a028db759b1499bdac564b.png)

完成：
![Img](./media/9fb4415fb62c5646cea0e19b4ad82d16.png)

安装11

安装所需零件：
![Img](./media/3df3bb88fe645ffc612ad36c2b1b58e0.png)

安装：
![Img](./media/7b8bd9db47c56bf139a8ab5eb7e8184b.png)

完成：
![Img](./media/20d27a21a19fb269c32142138bd3506a.png)

足球机器人形态完成
![Img](./media/68ab2ce8b96cf6d12a09df95613d7f96.png)

足球机器人形态接线图

灰色乐高乐高舵机接线图：
|舵机|小车PCB板|
| :--: | :--: |
|棕线| G |
| 红线 | 5V |
| 橙黄线 | S2（G3）|

![Img](./media/d9868c0d4845dd5073cfb101102f4394.png)

![Img](./media/1eba85e126c0c3c0f2be2f0d9b14b759.png)








### 足球门安装步骤

安装1

安装所需零件：
![Img](./media/76fa95159bcdab3c7ea6b2ed0d7f4540.png)

安装：
![Img](./media/f092e3c8b56f1ebb7e8bc04cce843452.png)

完成：
![Img](./media/0f4344d17bde5d9cf26bcc6f6eefd60b.png)

安装2

安装所需零件：
![Img](./media/c73b789c28347a5efd381da4d8482c75.png)

安装：
![Img](./media/e80fe4b4bf2ddd0e947af462ba9110ba.png)

完成：
![Img](./media/8d7c7a7e206744e5cb2a974b82f37272.png)

安装3

安装所需零件：
![Img](./media/b9a8d99413fc08f87f656ce8a3d9d26e.png)

安装：
![Img](./media/fe6fc7fdea4305e1a33c72a4d9d360da.png)

完成：
![Img](./media/44d1b59a122899c3c3f01ce6402d2d55.png)



### 足球机器人课程

![Img](./media/891ceec9eaef6f8a9b62053b31783fb9.png)

#### 1.实验简介：
足球运动是一种大家非常喜爱的运动。让机器人去踢足球，听起来像天方夜谭似的。机器人也能去踢足球？ 是的，足球机器人可以做到像我们人一样去组成团队进行踢足球比赛，比如：一年一度的RoboCup机器人世界杯---RoboCup足球赛等。在本实验中，我们利用乐高积木搭建了一款足球机器人，并且使用足球机器人把小足球送进足球门里。

#### 2.足球机器人造型搭建：
![Img](./media/43e45818f7946a4557aa119111256ba1.png)

#### 3.实验代码：
需要先上传代码“<span style="color: rgb(255, 76, 65);">ESP8266_Code”</span>至ESP8266串口WIFI ESP-01模块中，其操作方法可以参照“Arduino C 教程”中的**项目16**或者**项目17**。
![Img](./media/73fee94d7be77cbb55d1bad37c317fa7.png)

<span style="color: rgb(255, 76, 65);">特别注意：需要先将“ESP8266_Code”中的用户Wifi名称和用户Wifi密码![Img](./media/c626b1eaedcc6b759c32f216582ddae8.png)改成你们自己的Wifi名称和Wifi密码。</span>
<br>
<br>
“ESP8266_Code”上传完后，再上传对应的实验代码“<span style="color: rgb(255, 76, 65);">football_robot</span>”位置如下图：
![Img](./media/ff0a6c613998890a65b72e96e9e9e225.png)

```
#include <Servo.h>
Servo lgservo;
#define ML 15
#define ML_PWM 17
#define MR 14
#define MR_PWM 16
#define servo2 3

char val;
char wifiData;

void setup() {
  Serial1.begin(9600);
  pinMode(ML, OUTPUT);
  pinMode(ML_PWM, OUTPUT);
  pinMode(MR, OUTPUT);
  pinMode(MR_PWM, OUTPUT);
  
  lgservo.attach(3);
  lgservo.write(180);
  delay(1000);
  lgservo.write(145);
}

void loop() {
  if(Serial1.available() > 0)
  {
    val = Serial1.read();
    Serial.print(val);
  }
  switch(val)
  {
    case 'F': car_forward(); break;
    case 'B': car_back(); break;
    case 'L': car_left(); break;
    case 'R': car_right(); break;
    case 'S': car_stop(); break;
    case 'p': lgservo.write(180); break;
    case 'x': lgservo.write(145); break;
  }
}


void car_forward()
{
  digitalWrite(ML,LOW);
  analogWrite(ML_PWM,127);
  digitalWrite(MR,LOW);
  analogWrite(MR_PWM,127);
}

void car_back()
{
  digitalWrite(ML,HIGH);
  analogWrite(ML_PWM,127);
  digitalWrite(MR,HIGH);
  analogWrite(MR_PWM,127);
}

void car_left()
{
  digitalWrite(ML,HIGH);
  analogWrite(ML_PWM,150);
  digitalWrite(MR,LOW);
  analogWrite(MR_PWM,105);
}

void car_right()
{
  digitalWrite(ML,LOW);
  analogWrite(ML_PWM,105);
  digitalWrite(MR,HIGH);
  analogWrite(MR_PWM,150);
}

void car_stop()
{
  digitalWrite(ML,LOW);
  analogWrite(ML_PWM,0);
  digitalWrite(MR,LOW);
  analogWrite(MR_PWM,0);
}

```
#### 4.实验场景：

1.将足球门（乐高造型已搭好）放在地上某个固定的位置，APP连上WiFi。

2.将小足球放在足球机器人的夹子中间，按住APP上的![Img](./media/7433963c8435ca3ab83aff5ecb85d7e2.png)按钮使夹子夹住小足球，同时操作小车方向按钮![Img](./media/880b61b104beef545737dff76518fd1d.png)使足球机器人把小足球送到离足球门一小段距离处再松开按钮![Img](./media/7433963c8435ca3ab83aff5ecb85d7e2.png)。这样，小足球掉在地上且往前滚，看看小足球是否会滚进足球门里？如果没有，就反复上面的操作，使小足球最终进入足球门里。

3.如果你们小伙伴们也拥有这款足球机器人，可以和小伙伴们一起进行足球比赛，每一个足球机器人都夹着小足球，大家都操作各自的APP上的小车方向按钮，看看谁能最终把足球送到足球门里。




















## 2. 投石攻城车

### 投石攻城车形态安装步骤

安装1

安装所需零件：
![Img](./media/9e8b3e7351735d141d431092fcffb479.png)

安装：
![Img](./media/9c85140d78b9c7ec7f4159c65c201507.png)

完成：
![Img](./media/253048370ff577f95d57645c4210930c.png)

安装2

安装所需零件：
![Img](./media/bc23805fdf7a49755a4f20c9362ec8ba.png)

安装：
![Img](./media/65cfb607a407529de17ba589f69baca1.png)

完成：
![Img](./media/461520fe6c323884fd2733301fda5ab5.png)

安装3

安装所需零件：
![Img](./media/e88ef6bcb51b0be7f4cada1b46d33e9c.png)

安装：
![Img](./media/36cd6b54d4f912f20066dc5e6e993600.png)

完成：
![Img](./media/df18029224500b523ea01b6faa7da2d7.png)

安装4

安装所需零件：
![Img](./media/844d7b10d318b5d5673c82ffa783744f.png)

安装：
![Img](./media/14c7d6e843e2f80d859210f6d60509dc.png)

完成：
![Img](./media/37f80e1017accf422475e76b2b9f5106.png)

安装5

安装所需零件：
![Img](./media/90c321244b9abd9dc2ebfcb0d125e999.png)

安装：
![Img](./media/305d6121b2192591e5bbf2050140d48a.png)

完成：
![Img](./media/da1671d61623dc7faefca6cbb8301078.png)

安装6

安装所需零件：
![Img](./media/43451af5d1bd87bb972a6b71234a30d2.png)

安装：
![Img](./media/848b01bf6415ba089a355adfa31af8ca.png)

完成：
![Img](./media/518ac7a60f6f8e011e93926c7cfb83e0.png)

安装7

安装所需零件：
![Img](./media/dfb2440b51a10eef98b03b0069e32021.png)

安装：
![Img](./media/e4351cf19a79918308a2dc220a09aa04.png)

完成：
![Img](./media/6ef205ba49670f9a93d2737522202c97.png)

安装8

安装所需零件：
![Img](./media/addf3ce70213de442249a74d7e85160d.png)

安装：
<span style="color: rgb(255, 76, 65);">（注意舵机线的位置）</span>

![Img](./media/19b44e95e468024369cbebe70971ee73.png)

完成：
![Img](./media/baa79f82247c2ef773d7758dd807ced4.png)

安装9

安装所需零件：
![Img](./media/5727ccd43c91e34e3d250466614ba407.png)

安装：
![Img](./media/7b188e21ae3437e2d63ec4412d3b9da5.png)

完成：
![Img](./media/d0b2547493c89524ab5bced14a9cc652.png)

安装10

安装所需零件：
![Img](./media/e94416b5678d371ad05926bc4b01c01a.png)

安装：
![Img](./media/413389ca57b529cc1d7532a6793da52d.png)

完成：
![Img](./media/ed088cf5be440f8b113a6c4dbb78b2f0.png)

安装11

安装所需零件：
![Img](./media/043f3385a86c80eaa1f17e2933460392.png)

安装：
![Img](./media/aaeb5e899ba77611c1355fafc4c6beaf.png)

完成：
![Img](./media/c2b19dbbb9a41315bdce22df99d103be.png)

安装12

安装所需零件：
![Img](./media/6da01d4f79261f11bd2eee8029fe75f1.png)

安装：
![Img](./media/e4312a5ab599f1085982ad397d380bb2.png)

完成：
![Img](./media/7dab68a9d72883e027e0d713e0d8d38b.png)

安装13

安装所需零件：
![Img](./media/6f5ab3e48517412bb2862397020de408.png)

安装：
![Img](./media/fe375f3d488501e36834813c4d5f2f24.png)

完成：
![Img](./media/a54e1e84dc1752ffe7132dc1f9e35626.png)

安装14

安装所需零件：
![Img](./media/74569359da76d9f8b6b0f1cc7ba4f632.png)

安装：
![Img](./media/d89fe19cb90285b9a170378c65dc91d5.png)

完成：
![Img](./media/51f42a6c4dd1ff98868c690d8b109c1f.png)

安装15

安装所需零件：
![Img](./media/25f90e904a93d92847d6870d2aaea7ec.png)

安装：
![Img](./media/218b643a5047b8762a045518774a6d60.png)

完成：
![Img](./media/c7ce227db3fb6a840aa43fb744b49cfb.png)

安装16

安装所需零件：
![Img](./media/44285e3d6f759695623bf01662f20ee2.png)

安装：
![Img](./media/58f1915962a16886899723587c101bb6.png)

完成：
![Img](./media/9e7de1e3cb74186c51b30daca27575c3.png)

安装17

安装所需零件：
![Img](./media/a6e3b4c521cbb738607d45599efbb798.png)

<span style="color: rgb(255, 76, 65);">安装前需调节舵机角度为0°。</span>

将舵机的线接到PCB上板的S2接口：
|舵机|小车PCB板|
| :--: | :--: |
|棕线| G |
| 红线 | 5V |
| 橙黄线 | S2（G3）|

![Img](./media/d9868c0d4845dd5073cfb101102f4394.png)

**Arduino 代码：**
```
#include <Servo.h>
Servo lgservo;  // 创建舵机对象来控制舵机

void setup() {
  lgservo.attach(3);  // 将舵机接到引脚G3上
}

void loop() {
  lgservo.write(0); // 舵机转到对应角度位置
}

```
上面的Arduino代码在资料中有提供，打开舵机的调整代码并烧录到Beetlebot的Raspberry Pi Pico主板，上传完成。代码如下图位置：
![Img](./media/b9097a88abb4d54fc78f312c783e5964.png)

安装：
<span style="color: rgb(255, 76, 65);">（安装姿态与下图保持一致）</span>

完成：
![Img](./media/3aa60b222e071d97dd8ccb32f9ee5395.png)

安装18

安装所需零件：
![Img](./media/e2bf006e82b2956a0e41bd16e7fcf8de.png)

安装：
![Img](./media/851ea7c7ff771460fa746c46a0189e6c.png)

完成：
![Img](./media/3a66553914d6b31139eeb783db724e09.png)

#### 投石攻城车完成
![Img](./media/a9352af616e0bd00b2995538275d5dea.png)


#### 投石攻城车形态接线图
灰色乐高舵机接线图：
|舵机|小车PCB板|
| :--: | :--: |
|棕线| G |
| 红线 | 5V |
| 橙黄线 | S2（G3）|

![Img](./media/d9868c0d4845dd5073cfb101102f4394.png)
![Img](./media/5f6500828b04e6208d5d2848fbf7f5e9.png)









### 投石攻城车课程
![Img](./media/4d1f2094818674071c51c91d47ba4b0c.png)

#### 1.实验简介：
投石攻城车在古代主要用于围攻和防守要塞，主要是用木头制作的，是利用配重物的重力发射，把石头抛出去。我们也制作了一款投石攻城车，是由车和乐高积木搭建而成的，车上装有舵机和齿轮，长臂末端有乐高搭建的凹槽是用于装投射物。发射时，舵机转动带动齿轮把长臂向后推，把投射物放入凹槽中,当舵机转动一定角度带动齿轮把长臂完全升起时，投射物从凹槽中飞出。

#### 2.投石攻城车造型搭建：
![Img](./media/09cc421516729e110954b24016d57be8.png)

#### 3.实验代码：
需要先上传代码“<span style="color: rgb(255, 76, 65);">ESP8266_Code”</span>至ESP8266串口WIFI ESP-01模块中，其操作方法可以参照“Arduino C 教程”中的**项目16**或者**项目17**。。
![Img](./media/0fec3938e57885c27d17ced6db3bcfad.png)
<span style="color: rgb(255, 76, 65);">特别注意：需要先将“ESP8266_Code”中的用户Wifi名称和用户Wifi密码![Img](./media/d169f9320a10aaa2ed42ec4ae4fe5a92.png)改成你们自己的Wifi名称和Wifi密码。</span>
<br>
“ESP8266_Code”上传完后，再上传对应的实验代码“<span style="color: rgb(255, 76, 65);">catapult</span>”位置如下图：
![Img](./media/f545a368e64d98bcccb7172b12983a6b.png)

```
#include <Servo.h>
Servo lgservo;
#define ML 15
#define ML_PWM 17
#define MR 14
#define MR_PWM 16
#define servo2 3

char val;
char wifiData;
boolean servo_flag = 1;

void setup() {
  Serial1.begin(9600);
  pinMode(ML, OUTPUT);
  pinMode(ML_PWM, OUTPUT);
  pinMode(MR, OUTPUT);
  pinMode(MR_PWM, OUTPUT);
  
  lgservo.attach(3);
  lgservo.write(0);
}

void loop() {
  if(Serial1.available() > 0)
  {
    val = Serial1.read();
    Serial.print(val);
  }
  switch(val)
  {
    case 'F': car_forward(); break;
    case 'B': car_back(); break;
    case 'L': car_left(); break;
    case 'R': car_right(); break;
    case 'S': car_stop(); break;
    case 'p': lgservo.write(85);servo_flag = 1; break;
    case 'x': servo_down(); break;
  }
}

void servo_down()
{
  while( servo_flag == 1)
  {
    for(int i=55; i>0; i--)
    {
      lgservo.write(i);
      delay(2);
    }
    servo_flag = 0;
  }
  
}


void car_forward()
{
  digitalWrite(ML,LOW);
  analogWrite(ML_PWM,255);
  digitalWrite(MR,LOW);
  analogWrite(MR_PWM,255);
}

void car_back()
{
  digitalWrite(ML,HIGH);
  analogWrite(ML_PWM,0);
  digitalWrite(MR,HIGH);
  analogWrite(MR_PWM,0);
}

void car_left()
{
  digitalWrite(ML,HIGH);
  analogWrite(ML_PWM,150);
  digitalWrite(MR,LOW);
  analogWrite(MR_PWM,105);
}

void car_right()
{
  digitalWrite(ML,LOW);
  analogWrite(ML_PWM,105);
  digitalWrite(MR,HIGH);
  analogWrite(MR_PWM,150);
}

void car_stop()
{
  digitalWrite(ML,LOW);
  analogWrite(ML_PWM,0);
  digitalWrite(MR,LOW);
  analogWrite(MR_PWM,0);
}

```

#### 4.实验场景：

1.在场地用乐高积木搭建几个目标物（目标物A，B，C，D，E），目标物在投石攻城车前方且都隔一段距离。APP连上WiFi。

2.操作APP上的小车方向![Img](./media/880b61b104beef545737dff76518fd1d.png)按钮使投石攻城车正对目标物A一段距离，按住按钮![Img](./media/7433963c8435ca3ab83aff5ecb85d7e2.png)，舵机转动一定角度带动齿轮升起长臂把乐高积木块抛出去；松开按钮![Img](./media/7433963c8435ca3ab83aff5ecb85d7e2.png)，舵机转动带动齿轮把长臂向后推。看看乐高积木块是否打击到目标物A？如果没有，就反复操作小车方向按钮![Img](./media/880b61b104beef545737dff76518fd1d.png)、按住或松开按钮![Img](./media/7433963c8435ca3ab83aff5ecb85d7e2.png)，调整投石攻城车与目标物A之间的距离，使抛出去的乐高积木块刚好可以打击到目标物A。

3.打击目标物B，C，D，E的操作方法和上面的一样。按住按钮![Img](./media/7433963c8435ca3ab83aff5ecb85d7e2.png)，舵机转动一定角度带动齿轮升起长臂把乐高积木块抛出去。

















## 3. 搬运机器人

### 搬运机器人形态安装步骤

安装1

将超声波云台拆下：
![Img](./media/68fae490d18e4b45a82e46dd575a866c.png)

安装所需零件：
![Img](./media/ecdf315ba42f074187416db62e397d09.png)

安装：
![Img](./media/6180102a31a2f55c5d25a4bc92ab1abc.png)

完成：
![Img](./media/52e1893401cefac0c4349b20e463afb2.png)

安装2

安装所需零件：
![Img](./media/bb8aade1ec6162ae2f5e6bc1b35624bd.png)

安装：
![Img](./media/6156ff3545271da1a4b8cbbfea2d2ba0.png)

完成：
![Img](./media/75d991037b1189b8c694f4d077efd285.png)

安装3

安装所需零件：
![Img](./media/709749a21a1537be469bdbcb2479d45b.png)

安装：
![Img](./media/c2429f1911401760bfa0761bd945a253.png)

完成：
![Img](./media/86d6fcd681f7e3c9a3896f39bc9e8164.png)

安装4

安装所需零件：
![Img](./media/971632fd4431768b4198a35ff213ed9f.png)

安装：
![Img](./media/8fcf2f2ccb9243af85218c9ac12c60bd.png)

完成：
![Img](./media/0e863c16c6af9f62c427240d0803a3a9.png)

安装5

安装所需零件：
![Img](./media/84cd549c1a5d3c02d4a8e80f320c98ee.png)

安装：
![Img](./media/a5efd2f596718a9d1d92e476772f9b1c.png)

完成：
![Img](./media/075866c57ee8e6205817e33b9a68986e.png)

安装6

安装所需零件：
![Img](./media/36a0707c4528e785a9e737bc161d700f.png)

安装：
![Img](./media/bb90734fd7c9cd5d9d7c39d2f5e2beef.png)

完成：
![Img](./media/5030a32927a5b7750cac3870de0a8244.png)

安装7

安装所需零件：
![Img](./media/d343284fba2992bfaf5a185a1d191c86.png)

安装：
![Img](./media/e0be82fedc0e4972c32410e9fcf90905.png)

完成：
![Img](./media/1e0e6114dc96247b8b5c50216fafa4a0.png)

安装8

安装所需零件：
![Img](./media/0ce643b46cd487e30236e98d9a4940ed.png)

安装：
<span style="color: rgb(255, 76, 65);">（注意舵机线的位置）</span>

![Img](./media/50294e5999142edf6651eef9bc2dbec0.png)

完成：
![Img](./media/f4d2c1c380d56108a9ad20ba39f1fc2f.png)

安装9

安装所需零件：
![Img](./media/9ef5861a9c32ddda24c1945cbe274858.png)

<span style="color: rgb(255, 76, 65);">安装前需调节舵机角度为180°。</span>

将舵机的线接到PCB上板的S2接口：
|舵机|小车PCB板|
| :--: | :--: |
|棕线| G |
| 红线 | 5V |
| 橙黄线 | S2（G3）|

![Img](./media/d9868c0d4845dd5073cfb101102f4394.png)

**Arduino 代码：**
```
#include <Servo.h>
Servo lgservo;  // 创建舵机对象来控制舵机

void setup() {
  lgservo.attach(3);  // 将舵机接到引脚G3上
}

void loop() {
  lgservo.write(180); // 舵机转到对应角度位置
}

```
上面的Arduino代码在资料中有提供，打开舵机的调整代码并烧录到Beetlebot的Raspberry Pi Pico主板，上传完成。代码如下图位置：
![Img](./media/82f0b6a3ac8b6087c4d51261b288aaa0.png)

安装：
<span style="color: rgb(255, 76, 65);">（安装姿势与下图一致）</span>

![Img](./media/27dea978175b2d1a4d25acf4eac1392b.png)

完成：
![Img](./media/e2d88f31699e49bd1afd43a561e97eff.png)

安装10

安装所需零件：
![Img](./media/7f160322ccccf70ef745cb8e8db7fc84.png)

安装1：
![Img](./media/48429941880488cd479c2ae8b8e9aae0.png)

安装2：
![Img](./media/af4a6b4b118499748b92eccaaed4d5c1.png)

安装2完成：
![Img](./media/6638d479dad427ee84719a83c74e92ab.png)

安装3：
![Img](./media/84d2783f5031e6924a74f4b7cea58313.png)

完成：
![Img](./media/597fa889c46bd01749408f90ba98845e.png)

#### 搬运机器人形态安装完成
![Img](./media/ac6b7eae9720a303011d7863ea3e5b74.png)

#### 搬运机器人形态接线图
灰色乐高舵机接线图：
|舵机|小车PCB板|
| :--: | :--: |
|棕线| G |
|红线 | 5V |
|橙黄线 | S2（G3）|

![Img](./media/d9868c0d4845dd5073cfb101102f4394.png)
![Img](./media/5bd32553b1e9bfd0cc9e05d4ad9c9791.png)



### 搬运机器人课程
![Img](./media/2a4bb3cfe903e7080a023e548298b6e1.png)

#### 1. 实验简介：
在众多的工业机器人中，搬运机器人无疑是应用率较高的机器人之一，不管是在工业制造、仓储物流、烟草、医药、食品、化工等行业领域，还是在邮局、图书馆、港口码头、机场、停车场等场景，都可以见到搬运机器人的身影。在本实验中，我们也利用乐高积木搭建了一款搬运机器人来搬运东西。

#### 2.搬运机器人造型搭建：
![Img](./media/80663c66b5f36ea6925df6921617e289.png)

#### 3.实验代码：
需要先上传代码“<span style="color: rgb(255, 76, 65);">ESP8266_Code”</span>至ESP8266串口WIFI ESP-01模块中，其操作方法可以参照“Arduino C 教程”中的**项目16**或者**项目17**。
![Img](./media/2fa00b62970ddb738fcb40d382e07aee.png)

<span style="color: rgb(255, 76, 65);">特别注意：需要先将“ESP8266_Code”中的用户Wifi名称和用户Wifi密码![Img](./media/c626b1eaedcc6b759c32f216582ddae8.png)改成你们自己的Wifi名称和Wifi密码。</span>
<br>
<br>
“ESP8266_Code”上传完后，再上传对应的实验代码“<span style="color: rgb(255, 76, 65);">handling_robot</span>”位置如下图：
![Img](./media/73b9450c14f2c70278146b27894267b4.png)

```
#include <Servo.h>
Servo lgservo;
#define ML 15
#define ML_PWM 17
#define MR 14
#define MR_PWM 16
#define servo2 3

char val;
char wifiData;

void setup() {
  Serial1.begin(9600);
  pinMode(ML, OUTPUT);
  pinMode(ML_PWM, OUTPUT);
  pinMode(MR, OUTPUT);
  pinMode(MR_PWM, OUTPUT);
  
  lgservo.attach(3);
  lgservo.write(180);
}

void loop() {
  if(Serial1.available() > 0)
  {
    val = Serial1.read();
    Serial.print(val);
  }
  switch(val)
  {
    case 'F': car_forward(); break;
    case 'B': car_back(); break;
    case 'L': car_left(); break;
    case 'R': car_right(); break;
    case 'S': car_stop(); break;
    case 'p': lgservo.write(110); break;
    case 'x': lgservo.write(180); break;
  }
}


void car_forward()
{
  digitalWrite(ML,LOW);
  analogWrite(ML_PWM,127);
  digitalWrite(MR,LOW);
  analogWrite(MR_PWM,127);
}

void car_back()
{
  digitalWrite(ML,HIGH);
  analogWrite(ML_PWM,127);
  digitalWrite(MR,HIGH);
  analogWrite(MR_PWM,127);
}

void car_left()
{
  digitalWrite(ML,HIGH);
  analogWrite(ML_PWM,150);
  digitalWrite(MR,LOW);
  analogWrite(MR_PWM,105);
}

void car_right()
{
  digitalWrite(ML,LOW);
  analogWrite(ML_PWM,105);
  digitalWrite(MR,HIGH);
  analogWrite(MR_PWM,150);
}

void car_stop()
{
  digitalWrite(ML,LOW);
  analogWrite(ML_PWM,0);
  digitalWrite(MR,LOW);
  analogWrite(MR_PWM,0);
}

```
#### 4.实验场景：

1.在投石攻城车项目实验中，投石攻城车抛乐高积木块击打目标物A、B、C、D散落满地的一些乐高积木。
2.APP连上WiFi，操作APP上的小车方向按钮![Img](./media/880b61b104beef545737dff76518fd1d.png)使搬运机器人移动到散落满地的乐高积木旁。

3.用手拣一些小的乐高积木块放到铲斗上，操作APP上的小车方向按钮![Img](./media/880b61b104beef545737dff76518fd1d.png)使搬运机器人把乐高积木搬运到原始位置。按住按钮![Img](./media/7433963c8435ca3ab83aff5ecb85d7e2.png)，舵机转动一定角度带动齿轮使铲斗升起，这样，运送的乐高积木块就掉下来。

4.重复上面的操作方法，把所有的乐高积木块都搬运到原始位置。




































